﻿using System;
using System.Linq;
using System.Text;
using Spring.Data.Core;
using System.Data;
using System.Collections;
using Spring.Data;
using Spring.Data.Common;
using GestionadorBaseDatos;
using CRUD.InterfaceDAO;
namespace CRUD.DAO
{
    public class ParticipanteDao : AdoDaoSupport, IDaoParticipante
    {
        /// <summary>
        /// strings declarados para la consultas a la bd
        /// </summary>
        #region Querys para metodos
        private string sqlById = "select idParticipante, nombre, descripcion, idCategoria, proporcionParticipante from participante where idParticipante = @idParticipante";
        private string sqlByCategoria = "select idParticipante, nombre, descripcion, idCategoria, proporcionParticipante from participante where idCategoria = @idCategoria";
        private string SQL = @"select idParticipante, nombre, descripcion, proporcion, idCategoria from participante where idParticipante = @idParticipante";
        private string sql = "select idParticipante, nombre, descripcion, idCategoria, proporcionParticipante from participante";
        private string sqlInsert = "INSERT INTO participante (nombre,idCategoria, proporcionParticipante) VALUES (@nombre, @idCategoria, @proporcionParticipante)";

        # endregion

        # region metodos

        /// <summary>
        /// Obtiene lista con todos los participantes
        /// </summary>
        /// <returns>Lista participantes</returns>
        public virtual IList GetAll()
        {
            return (IList)AdoTemplate.QueryWithRowMapper(CommandType.Text, sql, new ParticipanteRowMapper());
        }

        /// <summary>
        /// Lista de participantes dada una categoria
        /// </summary>
        /// <param name="idCategoria">id de la categoria a buscar</param>
        /// <returns></returns>
        public virtual IList GetByCategoria(int idCategoria)
        {
            IDbParameters dbParameters = AdoTemplate.CreateDbParameters();
            dbParameters.Add("@idCategoria", MySql.Data.MySqlClient.MySqlDbType.Int32, 50).Value = idCategoria;

            return (IList)AdoTemplate.QueryWithRowMapper(CommandType.Text, sqlByCategoria, new ParticipanteRowMapper(), dbParameters);

        }

        /// <summary>
        /// Obtiene participante segun el id
        /// </summary>
        /// <param name="part">participante con el id a buscar</param>
        /// <returns>Datos participante</returns>
        public Participante GetById(Participante part)
        {
            return (Participante)AdoTemplate.QueryForObject(CommandType.Text, sqlById, new ParticipanteRowMapper(), "@idParticipante", DbType.String, 30, part.IdParticipante);
        }

        /// <summary>
        /// Obtiene participante segun el id
        /// </summary>
        /// <param name="idParticipante">id del participante a buscar</param>
        /// <returns>Datos participante</returns>
        public Participante GetById(int idParticipante)
        {
            return (Participante)AdoTemplate.QueryForObject(CommandType.Text, sqlById, new ParticipanteRowMapper(), "@idParticipante", DbType.String, 30, idParticipante);
        }

        /// <summary>
        /// Metodo para insertar en la bd un nuevo participante
        /// </summary>
        /// <param name="crear">Datos del participante a ingresar</param>
        public void Insert(Participante crear)
        {
            IDbParameters dbParameters = AdoTemplate.CreateDbParameters();
            dbParameters.Add("@nombre", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = crear.Nombre;
            dbParameters.Add("@proporcionParticipante", MySql.Data.MySqlClient.MySqlDbType.Int32, 50).Value = crear.Proporcion;
            dbParameters.Add("@idCategoria", MySql.Data.MySqlClient.MySqlDbType.Int32, 50).Value = crear.CategoriaFk.IdCategoria;
            AdoTemplate.ExecuteNonQuery(CommandType.Text, sqlInsert, dbParameters);
        }


        # endregion
    }
}
